# author = "Ronald"
# date   = 24-04-2010 07:29:02 PM

from OpenGL.GL import *
from OpenGL.GL import glScale
from OpenGL.GLU import *
from OpenGL.GLUT import *
from numpy import *
# import sys
# import math

# 'angulos del brazo y el antebrazo, en y en en z
#ARMY = 0.0
#ARMZ = 0.0
#FOREARMY = 0.0
#FOREARMZ = 0.0

# proporciones del largo de las partes del brazo
ARM = 2.0
FOREARM = 2.0
ELBOW = 1.0
SHOULDER = 1.0

# proporci'on para hacer el brazo a escala
#SIZE = 0.5


class RightArm(object):

    def __init__(self, size, position):
        self.size = size
        self.position = position
        self.armY = 0
        self.armZ = 0
        self.forearmY = 0
        self.forearmZ = 0


    def draw(self):

        # dibujar el hombro
        glPushMatrix()
        glScalef(self.size, self.size, self.size)
        glTranslatef (self.position[0], self.position[1], self.position[2])
        #glTranslatef (-ARM/2, 0.0, 0.0)
        glTranslatef(SHOULDER / 2, 0.0, 0.0)
        glRotatef(self.armZ, 0.0, 1.0, 0.0)
        glRotatef(self.armY, 0.0, 0.0, 1.0)
        glutWireSphere(SHOULDER / 2, 10, 10)      # self.armY
        glPopMatrix()

        # dibujar el brazo
        glColor3f (1.0, 0.0, 0.0)
        glPushMatrix()
        glScalef(self.size, self.size, self.size)
        glTranslatef (self.position[0], self.position[1], self.position[2])
        #glTranslatef (-ARM/2, 0.0, 0.0)
        glTranslatef (SHOULDER / 2, 0.0, 0.0)
        glRotatef(self.armZ, 0.0, 1.0, 0.0)
        glRotatef(self.armY, 0.0, 0.0, 1.0)
        glTranslatef (ARM / 2 + SHOULDER / 2, 0.0, 0.0)
        glScalef(ARM, 1, 1)
        glutWireCube(1)      # self.armY
        glPopMatrix()

        # dibujar el codo
        glColor3f (0.0, 0.0, 1.0)
        glPushMatrix()
        glScalef(self.size, self.size, self.size)
        glTranslatef (self.position[0], self.position[1], self.position[2])
        #glTranslatef (-ARM/2, 0.0, 0.0)
        glTranslatef (SHOULDER / 2, 0.0, 0.0)
        glRotatef(self.armZ, 0.0, 1.0, 0.0)
        glRotatef(self.armY, 0.0, 0.0, 1.0)
        glTranslatef(ELBOW / 2 + ARM + SHOULDER / 2, 0.0, 0.0)
        glutWireSphere(ELBOW / 2, 10, 10)      # self.armY
        glPopMatrix()

        # dibujar el antebrazo
        glColor3f (1.0, 0.0, 0.0)
        glPushMatrix()
        glScalef(self.size, self.size, self.size)
        glTranslatef (self.position[0], self.position[1], self.position[2])
        #glTranslatef (-1.0, 0.0, 0.0)
        glTranslatef (SHOULDER / 2, 0.0, 0.0)
        glRotatef(self.armZ, 0.0, 1.0, 0.0)
        glRotatef(self.armY, 0.0, 0.0, 1.0)
        glTranslatef (ELBOW / 2 + ARM + SHOULDER / 2, 0.0, 0.0)
        glRotatef (self.forearmY, 0.0, 0.0, 1.0)
        glTranslatef (FOREARM / 2 + ELBOW / 2, 0.0, 0.0)
        glScalef(FOREARM, 1, 1)
        glutWireCube(1)      # self.forearmY
        glPopMatrix()

        #mover el brazo a la posicion correspondiente
        glPushMatrix()
        glTranslatef (self.position[0], self.position[1], self.position[2])
        glPopMatrix()




    #funciones de movimiento del brazo
    # mueve el codo hacia arriba
    def forearmYAdd(self):
        if self.forearmY < 90:
            self.forearmY = (self.forearmY + 5) % 360

    # mueve el codo hacia abajo
    def forearmYSubstract(self):
        if self.forearmY > 0:
            self.forearmY = (self.forearmY - 5) % 360

    # mueve el hombro hacia arriba
    def armYAdd(self):
        if self.armY < 90 or self.armY >= 270:
            self.armY = (self.armY + 5) % 360

    # mueve el hombro hacia abajo
    def armYSubstract(self):
        if self.armY <= 90 or self.armY > 270:
            self.armY = (self.armY - 5) % 360

    # mueve el hombro hacia delante
    def armZAdd(self):
        if self.armZ >= 270:
            self.armZ = (self.armZ + 5) % 360

    def armZSubstract(self):
        if self.armZ > 270 or self.armZ == 0:
            self.armZ = (self.armZ - 5) % 360